<?php
/*
 * @Author: 李明
 * @Date: 2021-08-10 16:59:23
 * @LastEditTime: 2021-12-26 10:42:23
 * @LastEditors: 李明
 * @Description: 
 * @FilePath: /CRM2.0-PHP/app/Http/Controllers/admin/RoleController.php
 * @山东壹零贰肆信息科技有限公司
 */

namespace App\Http\Controllers\admin;

use App\Http\Controllers\common\CommonFun;
use App\Http\Controllers\common\LMReturn;
use App\Http\Controllers\Controller;
use App\Models\Role;
use App\Models\WorkerRole;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class RoleController extends Controller
{
    //角色列表
    public function BaseRoleList(Request $request)
    {
        //去验证token值
        $tokenInfo = json_decode($this->verifyTokenLm(), true);
        //判断传递过来的token的code码是否等于400  如果是400的话，提示token不正确
        if ($tokenInfo['code'] == 400) {
            return LMReturn::Error($tokenInfo['msg'], $tokenInfo['code']);
        }
        //接收前端传递过来的值
        $all = $request->all();

        $workerinfo = json_decode(
            WorkerRole::where(
                "worker_id",
                $tokenInfo['worker_id']
            )
                ->orderBy("role_id")
                ->first(),
            true
        );
        // dd($workerinfo);
        $RoleList = json_decode(Role::get(), true);

        if (!is_null($workerinfo['role_id'])) {
            $id_list = CommonFun::PidChildList($RoleList, $workerinfo['role_id']);
            $id_list = explode(',', $id_list);

            $roleListSql = json_decode(
                Role::whereIn("id", $id_list)
                    ->orderBy("create_time", "desc")
                    ->get(),
                true
            );
            $RoleTreeList = CommonFun::ArrToTreeList($roleListSql, "id", "pid");
        } else {
            $RoleTreeList = [];
        }
        return LMReturn::Success($RoleTreeList);
    }

    //角色删除
    public function BaseRoleDelete(Request $request)
    {
        //去验证token值
        $tokenInfo = json_decode($this->verifyTokenLm(), true);
        //判断传递过来的token的code码是否等于400  如果是400的话，提示token不正确
        if ($tokenInfo['code'] == 400) {
            return LMReturn::Error($tokenInfo['msg'], $tokenInfo['code']);
        }
        //接收前端传递过来的值
        $all = $request->all();
        //根据传递过来的角色ID来判断一下他是否被使用了
        $info = json_decode(WorkerRole::where("role_id", $all['role_id'])->get(), true);
        $ainfo = json_decode(Role::where("pid", $all['role_id'])->get(), true);
        if (empty($info) && empty($ainfo)) {
            //执行数据库操作
            //进行后台用户和角色关联表的删除
            $res = WorkerRole::where("role_id", $all['role_id'])->delete();
            //执行删除
            $res = Role::where("id", $all['role_id'])->delete();
            return LMReturn::sqlRes($res);
        } else {
            return LMReturn::Error("这个角色被使用了或存在下级，请确认删除之后在进行操作");
        }
    }
    //角色的添加和修改
    public function BaseRoleSave(Request $request)
    {
        //去验证token值
        $tokenInfo = json_decode($this->verifyTokenLm(), true);
        //判断传递过来的token的code码是否等于400  如果是400的话，提示token不正确
        if ($tokenInfo['code'] == 400) {
            return LMReturn::Error($tokenInfo['msg'], $tokenInfo['code']);
        }
        //接收前端传递过来的值
        $all = $request->all();
        //判断前端是否传递了角色ID，如果传递了，那么就是修改，反之就是添加
        //判断传递过来的是不是空
        // dd($all);
        if (!isset($all['name'])) {
            return LMReturn::Error("参数不能为空");
        }
        if (!array_key_exists("id", $all)) {
            //这里是添加
            //判断角色唯一性
            $info = json_decode(Role::where("name", $all['name'])->first(), true);
            //如果是空的话，就可以添加，反之就给出提示
            if (is_null($info)) {
                //这里可以添加
                $all['create_time'] = date("Y-m-d H:i:s");
                $all['update_time'] = date("Y-m-d H:i:s");
                $res = Role::create($all);
                return LMReturn::sqlRes($res, '角色添加成功', '角色添加失败');
            } else {
                //给出提示
                return LMReturn::Error("这个名称已存在，请确认之后在进行操作");
            }
        } else {
            //这里是修改
            $info = json_decode(Role::where("name", $all['name'])->where('id', "!=", $all['id'])->first(), true);
            //如果是空的话，就可以添加，反之就给出提示
            if (is_null($info)) {
                //这里可以修改
                $all['update_time'] = date("Y-m-d H:i:s");
                $res = Role::where("id", $all['id'])->update($all);
                return LMReturn::sqlRes($res, '角色修改成功', '角色修改失败');
            } else {
                //给出提示
                return LMReturn::Error("这个名称已存在，请确认之后在进行操作");
            }
        }
    }
    /**
     * @description: 查询角色详情
     * @param {Request} $request
     * @return {*}
     */
    public function queryRoleDetail(Request $request)
    {
        //去验证token值
        $tokenInfo = json_decode($this->verifyTokenLm(), true);
        //判断传递过来的token的code码是否等于400  如果是400的话，提示token不正确
        if ($tokenInfo['code'] == 400) {
            return LMReturn::Error($tokenInfo['msg'], $tokenInfo['code']);
        }
        //接收前端传递过来的值
        $all = $request->all();

        if (isset($all['id'])) {
            $role_id = $all['id'];
        } else {
            return LMReturn::Error('缺少必传参数', 'RC001');
        }

        try {
            $role = Role::where('id', $role_id)->first();
        } catch (\Throwable $th) {
            return LMReturn::Error('数据发生错误', 'RC002');
        }
        return LMReturn::Success($role);
    }
}
